//
//  CWOAuthViewController.swift
//  新浪微博练习02
//
//  Created by 曹魏 on 16/9/28.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit
import SVProgressHUD
//多继承

/*
 访问控制
 private fileprivate
 
 */


class CWOAuthViewController: UIViewController {
    //定义一个全局的webview,以便于授权页面能访问
    let webView = UIWebView()
    //loadview 的目的是为了创建一个webview
    override func loadView() {
        //解决webView没有数据的时候,底部黑色的条的问题
        webView.isOpaque = false
        
        view = webView
        //设置webview的代理
        webView.delegate = self
        
        
        //设置背景颜色
        view.backgroundColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
        
        
        //设置导航条
        setNavBar()
        //加载授权页面
        loadOAuthPage()
        
    }
    
//加载授权页面
    private func loadOAuthPage() {
        let urlString = "https://api.weibo.com/oauth2/authorize?" + "client_id=" + client_id + "&redirect_uri=" + redirect_uri
        
        let url = URL(string:urlString)
        
        let req = URLRequest(url: url!)
        
        
        webView.loadRequest(req)
        
        
        
    }
//    override func viewDidLoad() {
//        
//        
//        
//        super.viewDidLoad()
//        
//        
//        
//    }
    private func setNavBar() {
        //设置导航条
        //图片名称不能传空字符串,否则会有警告
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "关闭", imageName: "", target: self, action: #selector(close))
    }
    //按钮的监听点击事件
    @objc private func close() {
        //点击关闭按钮会dismiss
        dismiss(animated: true, completion: nil)
    }
    
    
    
    
    
    
    
    
}
//代码优化一下:给oauth控制器添加一个拓展,目的是让代理方法显而易见
extension CWOAuthViewController:UIWebViewDelegate {
    func webViewDidStartLoad(_ webView: UIWebView) {
        //开始加载webview的时候调用
        //显示等待指示器
        SVProgressHUD.show()
        
    }
    func webViewDidFinishLoad(_ webView: UIWebView) {
        
        //加载完成webview时调用
        //关闭等待指示器
        SVProgressHUD.dismiss()
    }
    //截取code需要webview的代理方法
    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        //截取重定向URL的code
        //绝对路径URL的对象的string形式
        let urlString = request.url?.absoluteString ?? ""
//        print(urlString)
//        print("~~~~")
        //如果URLstring中包含code=就说明授权成功
        let flag = "code="
        if urlString.contains(flag) {
            
            //获取URL参数部分
            let query = request.url?.query ?? ""

            
            
            //开始截取,可以从flag开始截取
            let code = (query as NSString).substring(from: flag.characters.count)
            //拿到code,请求token
//            loadAccessToken(code: code)
            //控制器关注请求的状态
            CWUserAccountViewModel.sharedAccountViewModel.loadAccessToken(code: code,finished : {
                (success) in
                if !success {
                    SVProgressHUD.showError(withStatus: errorTip)
                    return
                }
                //如果成功
                print("登录获取用户信息成功")
                //modal 一个欢迎页面的控制器控制器
                //不建议使用modal的方式切换视图控制器  而是应该切换根视图控制器
                //也不建议使用者者两种方式切换
                //UIApplication.shared.delegate?.window?.rootViewController =
                //UIApplication.shared.keyWindow?.rootViewController
                //表示哪个对象发出的通知 一般用这个参数来传递参数
                NotificationCenter.default.post(name: NSNotification.Name(KchangeRootViewController), object: "Welcome")
                
                
            })
            
            return false
        }
        
        
        
        
        return true
    }
    
    
}

























